<?php

namespace Agp\CoreBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

/**
 * Agp\CoreBundle\Entity\InfoEvento
 *
 * @ORM\Table(name="info_evento")
 * @ORM\Entity()
 * @ORM\HasLifecycleCallbacks
 */
class InfoEvento
{
    /**
     * @var integer $codInfoEvento
     *
     * @ORM\Column(name="cod_info_evento", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    protected $codInfoEvento;

    /**
     * @var string $nome
     *
     * @ORM\Column(name="descricao", type="string", length=21, nullable=false)
     * @Assert\NotBlank()
     * @Assert\Length(
     *      max = "21"
     * )
     */
    protected $descricao;
    
    /**
     * @var \DateTime $dtInicio
     *
     * @ORM\Column(name="dt_inicio", type="datetime", nullable=false)
     * @Assert\NotBlank()
     */
    protected $dtInicio;

    /**
     * @var \DateTime $dtTermino
     *
     * @ORM\Column(name="dt_termino", type="datetime", nullable=false)
     * @Assert\NotBlank()
     */
    protected $dtTermino;
    
    /**
     * @var string $titulo
     *
     * @Assert\Length(
     *      max = "21"
     * )
     * @ORM\Column(name="titulo", type="string", length=42, nullable=true)
     */
    protected $titulo;
    
    /**
     * @var integer $cidade
     *
     * @ORM\ManyToOne(targetEntity="Cidade", cascade={"persist"}, fetch="LAZY")
     * @ORM\JoinColumn(name="cod_cidade", referencedColumnName="id", onDelete="restrict", nullable=true)
     */
    protected $cidade;
    
    /**
     * @var \DateTime $horario
     *
     * @ORM\Column(name="horario", type="time", nullable=true)
     */
    protected $horario;
    
    /**
     * @var string $classificacao
     *
     * @ORM\Column(name="classificacao", type="string", length=42, nullable=true)
     */
    protected $classificacao;
    const CLA_SEM = "Todas as idades";
    const CLA_18 = "Maiores de 18 anos";
    const CLA_17 = "Maiores de 17 anos";
    const CLA_16 = "Maiores de 16 anos";
    const CLA_15 = "Maiores de 15 anos";
    const CLA_14 = "Maiores de 14 anos";
    const CLA_13 = "Maiores de 13 anos";
    const CLA_12 = "Maiores de 12 anos";
    const CLA_11 = "Maiores de 11 anos";
    const CLA_10 = "Maiores de 10 anos";
    const CLA_9 = "Maiores de 9 anos";
    const CLA_8 = "Maiores de 8 anos";
    const CLA_7 = "Maiores de 7 anos";
    const CLA_6 = "Maiores de 6 anos";
    const CLA_5 = "Maiores de 5 anos";
    const CLA_4 = "Maiores de 4 anos";
    
    /**
     * @var string $local
     *
     * @Assert\Length(
     *      max = "21"
     * )
     * @ORM\Column(name="local", type="string", length=21, nullable=true)
     * @Assert\NotBlank()
     */
    protected $local;
    
    /**
     * @var string $descricao
     *
     * @Assert\Length(
     *      max = "650"
     * )
     * @ORM\Column(name="descricao_evento", type="text", nullable=true)
     */
    protected $descricaoEvento;
    
    const TP_SHOW = 'Show';
    const TP_BALADA = 'Balada';
    const TP_TEATRO = 'Teatro';
    const TP_ESPORTE = 'Esporte';
    const TP_ESPECIAL = 'Especial';
    /**
     * @var string $tipo
     *
     * @ORM\Column(name="tipo", type="text", nullable=true)
     */
    protected $tipo;
    
    /**
     * @var string $endereco
     *
     * @ORM\Column(name="endereco", type="string", length=45, nullable=true)
     */
    protected $endereco;
    
    /**
     * @var string $numero
     *
     * @ORM\Column(name="numero", type="string", length=45, nullable=true)
     */
    protected $numero;

    /**
     * @var string $complemento
     *
     * @ORM\Column(name="complemento", type="string", length=45, nullable=true)
     */
    protected $complemento;

    /**
     * @var string $cep
     *
     * @ORM\Column(name="cep", type="string", length=45, nullable=true)
     */
    protected $cep;

    /**
     * @var string $bairro
     *
     * @ORM\Column(name="bairro", type="string", length=45, nullable=true)
     */
    protected $bairro;

    /**
     * @var string $email
     *
     * @ORM\Column(name="email", type="text", nullable=true)
     */
    protected $email;
    
    /**
     * @var string $email
     *
     * @ORM\Column(name="telefone", type="string", length=45, nullable=true)
     */
    protected $telefone;
    
    /**
     * @var string $email
     *
     * @ORM\Column(name="celular", type="string", length=45, nullable=true)
     */
    protected $celular;
    
    /**
     * @var string $facebook
     *
     * @ORM\Column(name="facebook", type="text", nullable=true)
     */
    protected $facebook;
    
    /**
     * @var string $descricaoRetirada
     *
     * @Assert\Length(
     *      max = "650"
     * )
     * @ORM\Column(name="descricao_retirada", type="text", nullable=true)
     */
    protected $descricaoRetirada;

    /* hack for Acls */
    public function getId(){
        return 'class';
    }
    
    public function __construct() {
        $this->tipo = self::TP_SHOW;
        $this->descricaoRetirada = "Retirada na bilheteria no local do evento";
    }

    public function __toString() {
        return $this->descricao;
    }

    public function getCodInfoEvento() {
        return $this->codInfoEvento;
    }

    public function setCodInfoEvento($codInfoEvento) {
        $this->codInfoEvento = $codInfoEvento;
    }

    public function getDescricao() {
        return $this->descricao;
    }

    public function setDescricao($descricao) {
        $this->descricao = mb_strtoupper($descricao, 'UTF-8');
    }
    
    public function getDtInicio() {
        return $this->dtInicio;
    }

    public function setDtInicio($dtInicio) {
        $this->dtInicio = $dtInicio;
    }

    public function getDtTermino() {
        return $this->dtTermino;
    }

    public function setDtTermino($dtTermino) {
        $this->dtTermino = $dtTermino;
    }
    
    public function getTitulo() {
        return $this->titulo;
    }

    public function setTitulo($titulo) {
        $this->titulo = $titulo;
    }

    public function getCidade() {
        return $this->cidade;
    }

    public function setCidade($cidade) {
        $this->cidade = $cidade;
    }

    public function getHorario() {
        return $this->horario;
    }

    public function setHorario($horario) {
        $this->horario = $horario;
    }

    public function getClassificacao() {
        return $this->classificacao;
    }

    public function setClassificacao($classificacao) {
        $this->classificacao = $classificacao;
    }
        
    public static function getClass(){
        return array(self::CLA_SEM => self::CLA_SEM,
                     self::CLA_18 => self::CLA_18,
                     self::CLA_17 => self::CLA_17,
                     self::CLA_16 => self::CLA_16,
                     self::CLA_15 => self::CLA_15,
                     self::CLA_14 => self::CLA_14,
                     self::CLA_13 => self::CLA_13,
                     self::CLA_12 => self::CLA_12,
                     self::CLA_11 => self::CLA_11,
                     self::CLA_10 => self::CLA_10,
                     self::CLA_9 => self::CLA_9,
                     self::CLA_8 => self::CLA_8,
                     self::CLA_7 => self::CLA_7,
                     self::CLA_6 => self::CLA_6,
                     self::CLA_5 => self::CLA_5);
    }
    
    public function getLocal() {
        return $this->local;
    }

    public function setLocal($local) {
        $this->local = $local;
    }
    
    public function getDescricaoEvento() {
        return $this->descricaoEvento;
    }

    public function setDescricaoEvento($descricaoEvento) {
        $this->descricaoEvento = $descricaoEvento;
    }
    
    public function getDescricaoEventoParcial(){
        
        $len = strlen($this->descricaoEvento);
        if ($len == 0){
            return "";
        }elseif ($len > 100){
            return substr($this->descricaoEvento, 0, 100)."...";
        }else{
            return substr($this->descricaoEvento, 0, 100);
        }
    }
    
    public static function getTipos(){
        return array(
                self::TP_SHOW => self::TP_SHOW,
                self::TP_BALADA => self::TP_BALADA,
                self::TP_ESPORTE => self::TP_ESPORTE,
                self::TP_TEATRO => self::TP_TEATRO,
                self::TP_ESPECIAL => self::TP_ESPECIAL
                     );
    }

    public function getTipo() {
        return $this->tipo;
    }

    public function setTipo($tipo) {
        $this->tipo = $tipo;
    }
    
    public function getEndereco() {
        return $this->endereco;
    }

    public function setEndereco($endereco) {
        $this->endereco = $endereco;
    }

    public function getComplemento() {
        return $this->complemento;
    }

    public function setComplemento($complemento) {
        $this->complemento = $complemento;
    }

    public function getCep() {
        return $this->cep;
    }

    public function setCep($cep) {
        $this->cep = $cep;
    }

    public function getBairro() {
        return $this->bairro;
    }

    public function setBairro($bairro) {
        $this->bairro = $bairro;
    }

    public function getEmail() {
        return $this->email;
    }

    public function setEmail($email) {
        $this->email = $email;
    }

    public function getTelefone() {
        return $this->telefone;
    }

    public function setTelefone($telefone) {
        $this->telefone = $telefone;
    }

    public function getCelular() {
        return $this->celular;
    }

    public function setCelular($celular) {
        $this->celular = $celular;
    }
    
    public function getNumero() {
        return $this->numero;
    }

    public function setNumero($numero) {
        $this->numero = $numero;
    }
    
    public function getFacebook() {
        return $this->facebook;
    }

    public function setFacebook($facebook) {
        $this->facebook = $facebook;
    }
    
    public function getDescricaoRetirada() {
        return $this->descricaoRetirada;
    }

    public function setDescricaoRetirada($descricaoRetirada) {
        $this->descricaoRetirada = $descricaoRetirada;
        return $this;
    }
}